const http = {
    // baseUrl 地址
    baseUrl: 'http://localhost:8080',

    // 请求方法
    request(config : any) {
        // config：请求配置对象，具体参照uniapp文档
        config = beforeRequest(config)
        // 请求地址拼接
        config.url = this.baseUrl + config.url
        // 异步请求
        return new Promise((resolve, reject) => {
            // @ts-ignore
            uni.request(config).then((res: any) => {
                // 响应拦截
                const response = beforeResponse(res)
                resolve(response)
            }).catch((err: any) => {
                errorHandle(err)
                reject(err)
            })
        })

    },
    get(url : string, data = {}) {
        /*
        url：接口地址
        data：查询参数
        auth：请求是否携带token进行认证（true/false）
        method：请求方式
        */
        return this.request({
            url: url,
            data: data,
            timeout: 10000,
            method: 'GET',
        })
    },
    post(url: any, data= {} ) {
        /*
        url：接口地址
        data：请求体参数
        auth：请求是否携带token进行认证（true/false）
        method：请求方式
        */
        return this.request({
            url: url,
            data: data,
            timeout: 10000,
            method: 'POST'
        })
    },
    put(url: any, data={}) {
        /*
        url：接口地址
        data：请求体参数
        auth：请求是否携带token进行认证（true/false）
        method：请求方式
        */
        return this.request({
            url: url,
            data: data,
            timeout: 10000,
            method: 'PUT'
        })
    },
    delete(url: any, data={}, ) {
        /*
        url：接口地址
        auth：请求是否携带token进行认证（true/false）
        method：请求方式
        */
        return this.request({
            url: url,
            timeout: 10000,
            method: 'DELETE'
        })
    }
}

// 请求拦截器
const beforeRequest = (config : any) => {
    // 请求之前拦截操作

    uni.showLoading({
        title: '拼命请求中',
        mask: true,
    })

    config.header = {}
    //config.header['Authorization'] = 'Bearer ' + uni.getStorageSync('token')
    return config
}

// 响应拦截器
const beforeResponse = (response : any) => {
    // 请求之后操作
    uni.hideLoading();

    const {code,data,message}  =   response.data
    if(code == undefined){
        return response.data
    } else if (code === 0){
        return data
    } else {
        uni.showToast(message)
        return null;
    }


}

// 请求异常处理器
const errorHandle = ((err : any) => {
    console.log('请求异常', err)
})

export default http
